class Catalogo < ActiveRecord::Base
  validates_presence_of :nombre, :on => :create
  validates_uniqueness_of :nombre, :on => :create

  has_many :entradas_catalogo, :order => 'valor'

  def self.name_value(nombre)
    Catalogo.find_by_nombre(nombre).entradas_catalogo.each { |e| [e.id, e.valor]}
  end

  # encuentra el valor correspondiente al catalogo y al id
  def self.valor(nombre, id)
    cat = Catalogo.find_by_nombre(nombre)
    
    unless cat.nil?
      valores = cat.entradas_catalogo
      datum = valores.find_by_alternate_id(id)
      unless datum.nil?
        datum.valor
      else
        logger.warn("Valor #{id} no existente en el catalogo #{nombre}")
        ""
      end
    else
      logger.warn("Catalogog #{nombre} no existe")
      ""
    end
  end

  # devuelve todos los valores 'hijos' del id para el catalogo 'nombre'
  def self.all_values(nombre, parent_id)
    @catalog = Catalogo.find(:first, :conditions => {:nombre => nombre})
    @parent = EntradasCatalogo.find(:first, :conditions => {:alternate_id => parent_id, :catalogo_id => @catalog})

    EntradasCatalogo.find(:all, :conditions => {:parent_value_id => @parent})
  end
  
  # devuelve el id correspondiente al +valor+ del catalogo +nombre+
  def self.valor_id(nombre, valor)
    catalogo_id = Catalogo.find_by_nombre(nombre).id
    EntradasCatalogo.find(:first, :conditions => {:valor => valor, :catalogo_id => catalogo_id }).alternate_id
    
  end
end
